package com.demo.rbactest.utils;

import com.demo.rbactest.entity.User;
import io.jsonwebtoken.*;

import java.util.Date;
import java.util.UUID;

/**
 * 生成和解析Token的工具类
 */
public class TokenTool {

    //    失效时间(一天)
    final static long time = 1000 * 60 * 60 * 24;
    //    验证的key(不能用中文,中文符号也不行,不然会报错)
    final static String key = "dgzs";

    private TokenTool() {
    }

    /**
     * @param user 登录之后的用户
     * @return 返回的token
     */
    public static String create(User user) {

        return Jwts.builder()
                .claim("username", user.getUsername())
                .setId(UUID.randomUUID().toString())
                .setExpiration(new Date(System.currentTimeMillis() + time))
                .signWith(SignatureAlgorithm.HS512, key)
                .compact();
    }

    /**
     * @param token 要解析的token
     * @return 解密成功或者失败
     */
    public static Boolean parse(String token) {
        try {
            Jwts.parser().setSigningKey(key).parseClaimsJws(token);
            return true;
        } catch (ExpiredJwtException | UnsupportedJwtException | MalformedJwtException | SignatureException | IllegalArgumentException e) {
            e.printStackTrace();
            return false;
        }
    }
}
